#!/bin/bash
# scripts/update.sh

REPO_URL="https://gitee.com/yuan_hp/work-files.git"
BRANCH="master"
INSTALL_DIR="$(pwd)"
VERSION_FILE="$INSTALL_DIR/version.txt"

INSTALL_DIR=$(realpath "$INSTALL_DIR") # 获取绝对路径
# -----------------------
CURRENT_SCRIPT_PATH=$(realpath "$0") # 获取当前脚本的绝对路径
REMOTE_VERSION=""  # 初始化远程版本变量

# 如果升级脚本在安装目录中，则创建临时脚本并执行
if [[ "$CURRENT_SCRIPT_PATH" == "$INSTALL_DIR"* ]]; then
    TMP_SCRIPT="$(mktemp)"
    echo "AUTOUPDATE=1" > $TMP_SCRIPT  # 添加环境变量到临时脚本
    cat $CURRENT_SCRIPT_PATH >> $TMP_SCRIPT  # 复制当前脚本到临时文件
    # 退出当前脚本后开始执行临时脚本 
    bash $TMP_SCRIPT &
    exit 0  # 退出当前脚本 
fi


# 检查新版本
check_update() {
    # 获取本地版本
    local LOCAL_VERSION=$(cat $VERSION_FILE 2>/dev/null || echo "v0.0.0")
    
    # 获取远程最新标签
    REMOTE_VERSION=$(git ls-remote --tags $REPO_URL | grep -v '\^{}' | awk -F/ '{print $3}' | sort -V | tail -1)
    test $? -ne 0 && echo "获取远程版本失败" && exit 1
    if [ "$LOCAL_VERSION" != "$REMOTE_VERSION" ]; then
        echo "发现新版本: $REMOTE_VERSION (当前版本: $LOCAL_VERSION)"
        return 0
    else
        echo "已是最新版本"
        return 1
    fi
}

# 执行更新
perform_update() {
    echo "开始更新..."
    # 克隆或拉取代码
    if [ -d "$INSTALL_DIR/.git" ]; then
        cd "$INSTALL_DIR"
        git  reset --hard
        test $? -ne 0 && echo "更新失败" && exit 1
        git  pull 
        test $? -ne 0 && echo "更新失败" && exit 1
        git  checkout tags/$REMOTE_VERSION
        test $? -ne 0 && echo "更新失败" && exit 1
    else
        if [[ "$INSTALL_DIR" == "$(pwd)" ]] ; then 
            INSTALL_DIR="$(basename $REPO_URL | sed 's/\.git//g')"
        fi 
        git clone --branch $BRANCH --depth 1 $REPO_URL "$INSTALL_DIR"
        test $? -ne 0 && echo "git clone 失败" && exit 1 
        cd "$INSTALL_DIR" 
        git checkout tags/$REMOTE_VERSION
        test $? -ne 0 && echo "更新失败" && exit 1
    fi
}

# 主逻辑
if check_update; then
    # 如果 AUTOUPDATE 存在且为1 ，则自动更新
    if [ -n "$AUTOUPDATE" ] && [ "$AUTOUPDATE" -eq 1 ]; then
        echo "检测到 AUTOUPDATE 环境变量为1，自动更新..."
        echo "更新目标目录:  $INSTALL_DIR"
        perform_update
        echo "更新完成"
        exit 0
    fi

    read -p "是否立即更新？[y/N] " choice
    if [[ "$choice" =~ [yY] ]]; then
        perform_update
    fi
fi


